package com.seeyon.apps.kk.listener;

import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.time.DateFormatUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.seeyon.apps.collaboration.event.CollaborationFinishEvent;
import com.seeyon.apps.collaboration.po.ColSummary;
import com.seeyon.apps.kk.manager.CeLiangSheBeiManagerImpl;
import com.seeyon.apps.kk.manager.TemplateTongManagerImpl;
import com.seeyon.ctp.common.AppContext;
import com.seeyon.ctp.common.filemanager.dao.AttachmentDAO;
import com.seeyon.ctp.common.filemanager.manager.FileManager;
import com.seeyon.ctp.common.po.affair.CtpAffair;
import com.seeyon.ctp.common.po.template.CtpTemplate;
import com.seeyon.ctp.form.bean.FormBean;
import com.seeyon.ctp.form.bean.FormDataMasterBean;
import com.seeyon.ctp.form.bean.FormFieldBean;
import com.seeyon.ctp.organization.manager.OrgManager;
import com.seeyon.ctp.util.annotation.ListenEvent;
import com.seeyon.kk.utils.ValueUtils;

/**
 * 测量设备表单监听类
 * 
 * @author seeyon
 *
 */
public class CeLiangSheBeiListener extends BaseListener {
	private static final Log log = LogFactory.getLog(CeLiangSheBeiListener.class);

	private AttachmentDAO attachmentDAO;
	private FileManager fileManager;
	private OrgManager orgManager;

	// 测量设备数据抛送实现类
	private CeLiangSheBeiManagerImpl ceLiangSheBeiManagerImpl = (CeLiangSheBeiManagerImpl) AppContext
			.getBean("ceLiangSheBeiManagerImpl");
	private TemplateTongManagerImpl tongManagerImpl = (TemplateTongManagerImpl) AppContext
			.getBean("templateTongManagerImpl");

	public AttachmentDAO getAttachmentDAO() {
		return attachmentDAO;
	}

	public void setAttachmentDAO(AttachmentDAO attachmentDAO) {
		this.attachmentDAO = attachmentDAO;
	}

	public FileManager getFileManager() {
		return fileManager;
	}

	public void setFileManager(FileManager fileManager) {
		this.fileManager = fileManager;
	}

	public OrgManager getOrgManager() {
		return orgManager;
	}

	public void setOrgManager(OrgManager orgManager) {
		this.orgManager = orgManager;
	}

	@ListenEvent(event = CollaborationFinishEvent.class, async = true)
	public void onStop(CollaborationFinishEvent event) throws Exception {
		Thread.sleep(LISTENER_THREAD_SLEEPTIME);
		String templetSubject = ValueUtils.getConfig().getString("kk.JLTemplateNO");
		String[] templetSubjects = StringUtils.split(templetSubject, ",");
		List<Map<String, Object>> items = this.jdbcTemplate
				.queryForList("SELECT EXT_ATT1 as flag FROM CTP_COMMENT_ALL WHERE AFFAIR_ID = ?", event.getAffairId());
		boolean flag = true; // 标记流程是否出现 不同意事项
		Object o = event.getSource();
		for (Map<String, Object> map : items) {
			String itep = MapUtils.getString(map, "flag"); // 获取态度编码
			flag = "collaboration.dealAttitude.disagree".equals(itep);
			if (flag)
				break;
		}
		if (ArrayUtils.contains(templetSubjects, event.getTemplateCode())) {
			log.info("========测量流程监听事件=========\n模板编号：" + event.getTemplateCode());
			Map<String, Object> map = new HashMap<>();
			map.put("id", event.getSummaryId().toString());
			map.put("templateCode", event.getTemplateCode());
			map.put("sendTOStatus", "N");
			map.put("carteDate", DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss"));
			map.put("count", "0");
			map.put("isAdd", "yes");  // 标记是否添加底表日志
			/** 
			 * 档案资料借阅 流程结束后返回意见信息
			 */
			if (StringUtils.equals(event.getTemplateCode(), "SH_ARCHIVES_0001")) {
				log.info("档案资料利用审批 数据抛送数字档案系统 start=========>>" + DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss"));
				map.put("templateName", "档案资料利用审批");
				tongManagerImpl.sendTODOCArchives(map);
				log.info("档案资料利用审批 数据抛送数字档案系统  end=========>>" + DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss"));
			}
			
			/**
			 * 以下单据 不同意 不抛送数据
			 */
			if (flag)
				return; 
			// 测量设备周期管理申请表
			if (StringUtils.equals(event.getTemplateCode(), "SH_CLSB_0001")) {
				log.info("========测量设备周期管理申请表=========");
				map.put("templateName", "测量设备周期管理申请表");
				ceLiangSheBeiManagerImpl.sendTONCInspectionCycle(map);
			}
			// 测量设备退出周检申请表
			if (StringUtils.equals(event.getTemplateCode(), "SH_CLSB_0002")) {
				log.info("========测量设备退出周检申请表=========");
				map.put("templateName", "测量设备退出周检申请表");
				ceLiangSheBeiManagerImpl.sendTONCInspectionStatus(map);
			}
			// 测量设备周期管理调整申请单
			if (StringUtils.equals(event.getTemplateCode(), "SH_CLSB_0003")) {
				log.info("========测量设备周期管理调整申请单=========");
				map.put("templateName", "测量设备周期管理调整申请单");
				ceLiangSheBeiManagerImpl.sendTONCAdjustCycle(map);
			}
			// 上岗证NC对接
			if (StringUtils.equals(event.getTemplateCode(), "SH_SGCORD_0001")) {
				log.info("上岗证数据抛送NC start=========>>" + DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss"));
				map.put("templateName", "上岗证");
				tongManagerImpl.sendTONCEmployeeCard(map);
				log.info("上岗证数据抛送NC end=========>>" + DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss"));
			}
			// 外场信息通知单
			if (StringUtils.equals(event.getTemplateCode(), "SH_SHOUHOU_WCXX_001")) {
				log.info("外场信息通知单数据抛送NC start=========>>" + DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss"));
				map.put("templateName", "外场信息通知单");
				tongManagerImpl.sendTONCWorkOrder(map);
				log.info("外场信息通知单数据抛送NC end=========>>" + DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss"));
			}
			// 专业技术职务聘任审批表
			if (StringUtils.equals(event.getTemplateCode(), "SH_ZYJS_ZWPR_001")) {
				log.info("专业技术职务聘任审批表数据抛送NC start=========>>"
						+ DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss"));
				map.put("templateName", "专业技术职务聘任审批表");
				tongManagerImpl.sendTONCBatchInsertTechVO(map);
				log.info(
						"专业技术职务聘任审批表数据抛送NC end=========>>" + DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss"));
			}
			// 职业技能等级晋升审批表
			if (StringUtils.equals(event.getTemplateCode(), "SH_ZYJN_DJJS_001")) {
				log.info("职业技能等级晋升审批表数据抛送NC start=========>>"
						+ DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss"));
				map.put("templateName", "职业技能等级晋升审批表");
				tongManagerImpl.sendTONCBatchInsertSkillVO(map);
				log.info(
						"职业技能等级晋升审批表数据抛送NC end=========>>" + DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss"));
			}
			// 新职工考核评价表
			if (StringUtils.equals(event.getTemplateCode(), "SH_STAFF_001")) {
				log.info("新职工考核评价表数据抛送NC start=========>>" + DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss"));
				map.put("templateName", "新职工考核评价表");
				tongManagerImpl.sendTONCBatchInsertNewEmployeeVO(map);
				log.info("新职工考核评价表数据抛送NC end=========>>" + DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss"));
			}
			// 职工能力考评（专业技术类）
			if (StringUtils.equals(event.getTemplateCode(), "SH_STAFF_002")) {
				log.info("职工能力考评（专业技术类）数据抛送NC start=========>>"
						+ DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss"));
				map.put("type", "y");
				map.put("templateName", "职工能力考评（专业技术类）");
				tongManagerImpl.sendTONCBatchInsertAbilityVO(map);
				log.info("职工能力考评（专业技术类）数据抛送NC end=========>>"
						+ DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss"));
			}
			// 职工能力考评（操作和辅助类）
			if (StringUtils.equals(event.getTemplateCode(), "SH_STAFF_003")) {
				log.info("职工能力考评（操作和辅助类）数据抛送NC start=========>>"
						+ DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss"));
				map.put("type", "n");
				map.put("templateName", "职工能力考评（操作和辅助类）");
				tongManagerImpl.sendTONCBatchInsertAbilityVO(map);
				log.info("职工能力考评（操作和辅助类）数据抛送NC end=========>>"
						+ DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss"));
			}
			// 劳动合同续签
			if (StringUtils.equals(event.getTemplateCode(), "SH_LDHT_0001")) {
				log.info("劳动合同续签 数据抛送NC start=========>>" + DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss"));
				map.put("templateName", "劳动合同续签");
				tongManagerImpl.sendTONCContractRenewal(map);
				log.info("劳动合同续签 数据抛送NC end=========>>" + DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss"));
			}
			// 职工年度考核登记表
			if (StringUtils.equals(event.getTemplateCode(), "SH_STAFF_004")) {
				log.info("职工年度考核登记表 数据抛送NC start=========>>"
						+ DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss"));
				map.put("templateName", "职工年度考核登记表");
				tongManagerImpl.sendTONCBatchInsertAnnualAssessVO(map);
				log.info("职工年度考核登记表 数据抛送NC end=========>>" + DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss"));
			}
			// 合格供应商调整表
			if (StringUtils.equals(event.getTemplateCode(), "SH_SUPPLIE_002")) {
				log.info("合格供应商调整表 数据抛送NC start=========>>"
						+ DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss"));
				map.put("type", "y");
				map.put("templateName", "合格供应商调整表");
				tongManagerImpl.sendTONCSupplierStatus(map);
				log.info("合格供应商调整表 数据抛送NC end=========>>" + DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss"));
			}
			// 供应商绩效评价表
			if (StringUtils.equals(event.getTemplateCode(), "SH_SUPPLIE_003")) {
				log.info("供应商绩效评价表 数据抛送NC start=========>>"
						+ DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss"));
				map.put("type", "n");
				map.put("templateName", "供应商绩效评价表");
				tongManagerImpl.sendTONCSupplierStatus(map);
				log.info("供应商绩效评价表 数据抛送NC end=========>>" + DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss"));
			}
			// 合同付款申请单
			if (StringUtils.equals(event.getTemplateCode(), "SH_HT_FK_0001")) {
				log.info("合同付款申请单 数据抛送NC start=========>>"
						+ DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss"));
				map.put("templateName", "合同付款申请单");
				tongManagerImpl.sendTONCApply(map);
				log.info("合同付款申请单 数据抛送NC end=========>>" + DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss"));
			}
		}
	}
}
